package org.example.ch01;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;

/**
 * springboot应用的核心启动类 (springboot应用是通过main方法直接启动的)
 * 这个注解又包含了@Configuration、@EnableAutoConfiguration、@ComponentScan三个注解
 * 因此,这个启动类既是一个启动类,也是一个spring的配置类,还具备扫描的功能以及启用了自动配置的功能
 * 注意：springboot默认的扫描路径是从当前类所在的包开始(包含所有的子包),也可以通过@scanBasePackages属性重新指定扫描路径(不建议修改)
 * EnableAutoConfiguration注解: 启用springboot的自动配置功能
 * 它的作用是通过一个导入选择器将所有自动配置类加载到spring容器中完成自动装配
*/

@SpringBootApplication
// @SpringBootApplication(scanBasePackages="xxx")
public class Ch01Application {

    public static void main(String[] args) {
        // 运行springboot应用,run方法运行完成后会返回一个初始化好的IOC容器
        // 注意: 这个IOC容器会根据当前部署环境而改变
        // 在没有集成web环境时,初始化是一个IOC容器,如果集成了web环境,那么初始化就是一个webApplicationContext
        ApplicationContext context = SpringApplication.run(Ch01Application.class, args);
    }
}
